package com.mmg.spzx.common.intercepter;

import com.alibaba.fastjson.JSON;
import com.mmg.spzx.model.entity.user.UserInfo;
import com.mmg.spzx.utils.AuthContextUtil;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.servlet.HandlerInterceptor;

/**
 * 用户登录认证拦截器
 * 2023/11/20：bug4
 * 如果在LogAspect.class类上加上@Component注解进行注册标注，那么该类会被自动注册到Spring容器中，无需再使用@Import注解导入。
 * @Component注解是Spring框架提供的通用的组件扫描和注册注解，用于将一个类声明为Spring容器的组件。当一个类被@Component注解标记后，Spring会自动扫描并将其实例化并加入到容器中。
 * 因此，如果在LogAspect.class上添加了@Component注解，Spring会自动将其作为一个组件进行注册，不需要额外使用@Import注解来导入。
 */
public class UserLoginAuthInterceptor implements HandlerInterceptor {

    @Autowired
    private RedisTemplate<String, String> redisTemplate;

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        // 如果token不为空，那么此时验证token的合法性
        String userInfoJSON = redisTemplate.opsForValue().get("user:spzx:" + request.getHeader("token"));
        AuthContextUtil.setUserInfo(JSON.parseObject(userInfoJSON, UserInfo.class));
        return true;
    }
}
